使用硬件合成
硬件合成提供一种高性能方式,使用显示控制器图层合成多个窗口。如果 Kanzi 应用程序由多层彼此叠加的分层应用程序组成,例如带有叠加的群集,则可以选择合成多个窗口。当您使用硬件合成时,可以单独开发和运行其中的每个应用程序。
硬件合成创建一个可以像使用纹理那样使用的合成目标。要得到正确的结果,硬件合成必须使用预乘阿尔法。请参阅阿尔法预乘。
当设置好 屏幕 (Screen) 节点的 屏幕清除颜色 (Screen Clear Color) 属性时,Kanzi 直接把颜色值写入到屏幕输出。这意味 屏幕清除颜色 (Screen Clear Color) RGB 值必须同阿尔法值进行预乘。
如果硬件合成不使用经过预乘的阿尔法,您必须将未经预乘的阿尔法转换为 Kanzi 输出的 RGBA 值。要将 RGBA 值转换成未经预乘的阿尔法,请执行以下操作:
- 设置 Kanzi 绘制期望到纹理的输出。
- 绘制该纹理到带有设置为 不透明 (Opaque) 的 混合模式 (Blend Mode) 属性,且使用输出 RGB 值除以阿尔法值所得到的 RGBA 值的片段着色器的屏幕。
例如:
- 在 素材库 (Library) > 材质和纹理 (Materials and Textures) > 材质类型 (Material Types) 中,复制 DefaultBlit 材质类型,并重命名新的材质类型以及使用该材质类型的材质。
建议如果您的工程不包含 DefaultBlit 材质类型,在素材库 (Library) > 材质和纹理 (Materials and Textures) 按下 Alt 并右键点击 材质类型 (Material Types) 中选择 DefaultBlit。
- 在 素材库 (Library) > 材质和纹理 (Materials and Textures) > 材质类型 (Material Types) 中双击新材质类型的 片段着色器 (Fragment Shader) 以在 着色器源编辑器 (Shader Source Editor) 中打开它,并将片段着色器文件内容替换为以下代码:
uniform sampler2D ContentTexture;
varying mediump vec2 vTexCoord;
void main()
{
precision lowp float;
vec4 color = texture2D(ContentTexture, vTexCoord);
if(color.a > 0.0)
{
color.rgb /= color.a;
}
gl_FragColor = color;
}
- 在 素材库 (Library) > 材质和纹理 (Materials and Textures) > 材质类型 (Material Types) 选择片段着色器已经过编辑的材质,在 属性 (Properties) 中点击 同步 uniform (Sync with Uniforms),并删除 Texture0 属性类型。
- 在 素材库 (Library) > 材质和纹理 (Materials and Textures) > 笔刷 (Brushes) 创建一个 材质笔刷 (Material Brush) 并在 属性 (Properties) 中,将 材质 (Material) 属性设置为使用已创建的材质类型的材质。
- 在 属性 (Properties) 材质 (Material) 属性的旁边,点击 前往 材质笔刷 (Material Brush) 使用的材质,并确保材质的 混合模式 (Blend Mode) 属性已设置为 不透明 (Opaque)。
- 在工程 (Project) 中选择RootPage 节点并在属性 (Properties) 中添加并进行以下设置:
- 合成笔刷 (Composition Brush) 设置为您创建的材质笔刷
- 力合成 (Force Composition) 设置为启用
另请参阅
合成与混合
材质类型和材质
着色器
打开导航